Also move DWM function grabbing and make those functions available to all of GDK-Win32.
https://bugzilla.gnome.org/show_bug.cgi?id=727316
static gboolean dummy;
+#ifdef HAVE_W32_DWM
+static HMODULE dwmdll = NULL;
+PFN_DwmEnableBlurBehindWindow dwmEnableBlurBehindWindow = NULL;
+PFN_DwmIsCompositionEnabled dwmIsCompositionEnabled = NULL;
+#endif
+
const GOptionEntry _gdk_windowing_args[] = {
{ "sync", 0, 0, G_OPTION_ARG_NONE, &gdk_synchronize,
/* Description of --sync in --help output */ N_("Don't batch GDI requests"), NULL },
_cf_text_html = RegisterClipboardFormat ("text/html");
_gdk_win32_selection_init ();
+
+/* HAVE_W32_DWM means that we have necessary declarations at compile-time,
+ * but we'd still like to be able to run on XP, so we'll load the functions
+ * we need at runtime.
+ */
+#ifdef HAVE_W32_DWM
+ if (dwmdll == NULL)
+ {
+ dwmdll = LoadLibraryA ("dwmapi.dll");
+ if (dwmdll == NULL)
+ {
+ /* This will make sure that we only try this once */
+ dwmdll = INVALID_HANDLE_VALUE;
+ }
+ else
+ {
+ dwmEnableBlurBehindWindow = (PFN_DwmEnableBlurBehindWindow)
+ GetProcAddress (dwmdll, "DwmEnableBlurBehindWindow");
+ dwmIsCompositionEnabled = (PFN_DwmIsCompositionEnabled)
+ GetProcAddress (dwmdll, "DwmIsCompositionEnabled");
+ }
+ }
+#endif
}
void
#include "config.h"
+#ifdef HAVE_W32_DWM
+#include <dwmapi.h>
+typedef HRESULT (WINAPI *PFN_DwmEnableBlurBehindWindow)(HWND,
+ const DWM_BLURBEHIND *);
+typedef HRESULT (WINAPI *PFN_DwmIsCompositionEnabled)(BOOL *pfEnabled);
+extern PFN_DwmEnableBlurBehindWindow dwmEnableBlurBehindWindow;
+extern PFN_DwmIsCompositionEnabled dwmIsCompositionEnabled;
+#endif
+
/* Make up for some minor w32api or MSVC6 header lossage */
#ifndef PS_JOIN_MASK
GdkAtom atom);
void _gdk_win32_append_event (GdkEvent *event);
void _gdk_win32_emit_configure_event (GdkWindow *window);
+gboolean _gdk_win32_is_desktop_composition_enabled ();
/* Initialization */
void _gdk_win32_windowing_init (void);
{
g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE);
+ return _gdk_win32_is_desktop_composition_enabled ();
+}
+
+gboolean
+_gdk_win32_is_desktop_composition_enabled ()
+{
+ BOOL b;
+ DWORD sysver, major, minor;
+ sysver = GetVersion ();
+ major = (DWORD)(LOBYTE (LOWORD (sysver)));
+ minor = (DWORD)(HIBYTE (LOWORD (sysver)));
+ /* Composition is always enabled in W8 */
+ if (major >= 6 && minor >= 2)
+ return TRUE;
+
+ if (dwmIsCompositionEnabled && (S_OK == dwmIsCompositionEnabled (&b)))
+ return b;
return FALSE;
}
screen = gtk_widget_get_screen (widget);
+ if (!gdk_screen_is_composited (screen))
+ return FALSE;
+
/* We need a visual with alpha */
visual = gdk_screen_get_rgba_visual (screen);
if (!visual)